Sub stapni_sustavi_pomaci() ' ' stapni_sustavi Macro ' Macro recorded 12.11.2009 by gf-harapin ' Dim br_stapova As Integer Dim br_cvorova As Integer Dim br_geom As Integer Dim br_mat As Integer Dim str As String Dim line As Integer ' ------------------------------------------------------- ' Polja vezana za cvorove ' ------------------------------------------------------- Dim cvor_coord(1000, 2) As Double Dim cvor_pridr(1000, 3) As Integer ' ------------------------------------------------------- ' Polja vezana za stapove ' ------------------------------------------------------- Dim stap_cvor(300, 2) As Integer Dim stap_mat(300) As Integer Dim stap_geom(300) As Integer Dim stap_duz(300) As Double Dim stap_kut(300) As Double 'Dim stap_otp(330, 6) As Integer ' ------------------------------------------------------- ' Polja vezana za materijal ' ------------------------------------------------------- Dim mat_kar(10, 2) As Double ' ------------------------------------------------------- ' Polja vezana za geometriju ' ------------------------------------------------------- Dim geom_kar(10, 2) As Double ' ------------------------------------------------------- ' Ucitaj osnovne podatke modela ' ------------------------------------------------------- br_stapova = Sheets("Ulazni podaci").Cells(2, 2) br_cvorova = Sheets("Ulazni podaci").Cells(1, 2) br_mat = Sheets("Ulazni podaci").Cells(4, 2) br_geom = Sheets("Ulazni podaci").Cells(3, 2) If (br_cvorova * 3 > 48) Then Response = MsgBox("Preveliki broj cvorova!", vbOKOnly, "Upozorenje") End End If ' ------------------------------------------------------- ' Ucitaj podatke o cvorovima modela ' ------------------------------------------------------- line = 7 For i = 1 To br_cvorova icvor = Sheets("Ulazni podaci").Cells(line, 1) cvor_coord(icvor, 1) = Sheets("Ulazni podaci").Cells(line, 2) cvor_coord(icvor, 2) = Sheets("Ulazni podaci").Cells(line, 3) cvor_pridr(icvor, 1) = Sheets("Ulazni podaci").Cells(line, 4) cvor_pridr(icvor, 2) = Sheets("Ulazni podaci").Cells(line, 5) cvor_pridr(icvor, 3) = Sheets("Ulazni podaci").Cells(line, 6) line = line + 1 Next i ' ------------------------------------------------------- ' Ucitaj podatke o stapovima modela ' ------------------------------------------------------- line = line + 2 For i = 1 To br_stapova istap = Sheets("Ulazni podaci").Cells(line, 1) stap_cvor(istap, 1) = Sheets("Ulazni podaci").Cells(line, 2) stap_cvor(istap, 2) = Sheets("Ulazni podaci").Cells(line, 3) stap_mat(istap) = Sheets("Ulazni podaci").Cells(line, 4) stap_geom(istap) = Sheets("Ulazni podaci").Cells(line, 5) Sheets("Ulazni podaci").Cells(line, 6) = cvor_coord(stap_cvor(istap, 1), 1) Sheets("Ulazni podaci").Cells(line, 7) = cvor_coord(stap_cvor(istap, 1), 2) Sheets("Ulazni podaci").Cells(line, 8) = cvor_coord(stap_cvor(istap, 2), 1) Sheets("Ulazni podaci").Cells(line, 9) = cvor_coord(stap_cvor(istap, 2), 2) stap_duz(istap) = Sheets("Ulazni podaci").Cells(line, 10) stap_kut(istap) = Sheets("Ulazni podaci").Cells(line, 11) line = line + 1 Next i ' ------------------------------------------------------- ' Ucitaj podatke o materijalima modela ' ------------------------------------------------------- line = line + 2 For i = 1 To br_mat imat = Sheets("Ulazni podaci").Cells(line, 1) mat_kar(imat, 1) = Sheets("Ulazni podaci").Cells(line, 2) mat_kar(imat, 2) = Sheets("Ulazni podaci").Cells(line, 3) line = line + 1 Next i ' ------------------------------------------------------- ' Ucitaj podatke o geometriji modela ' ------------------------------------------------------- line = line + 2 For i = 1 To br_geom imat = Sheets("Ulazni podaci").Cells(line, 1) geom_kar(imat, 1) = Sheets("Ulazni podaci").Cells(line, 4) geom_kar(imat, 2) = Sheets("Ulazni podaci").Cells(line, 5) line = line + 1 Next i ' ------------------------------------------------------- ' Formiraj matrice krutosti elemenata ' ------------------------------------------------------- Worksheets("El-kr").Activate Worksheets("El-kr").Range("A1:IV36000").Clear For istap = 1 To br_stapova line = (istap - 1) * 7 + 2 stup = 1 imat = stap_mat(istap) igeom = stap_geom(istap) E = mat_kar(imat, 1) A = geom_kar(igeom, 1) II = geom_kar(igeom, 2) L = stap_duz(istap) alfa = stap_kut(istap) For j = 1 To 6 For k = 1 To 6 Sheets("El-kr").Cells(line + j, stup + k) = 0 Next k Next j Sheets("El-kr").Cells(line + 1, stup + 1) = E * A / L Sheets("El-kr").Cells(line + 1, stup + 4) = -E * A / L Sheets("El-kr").Cells(line + 4, stup + 1) = -E * A / L Sheets("El-kr").Cells(line + 4, stup + 4) = E * A / L Sheets("El-kr").Cells(line + 2, stup + 2) = 12 * E * II / (L * L * L) Sheets("El-kr").Cells(line + 2, stup + 5) = -12 * E * II / (L * L * L) Sheets("El-kr").Cells(line + 5, stup + 2) = -12 * E * II / (L * L * L) Sheets("El-kr").Cells(line + 5, stup + 5) = 12 * E * II / (L * L * L) Sheets("El-kr").Cells(line + 2, stup + 3) = 6 * E * II / (L * L) Sheets("El-kr").Cells(line + 2, stup + 6) = 6 * E * II / (L * L) Sheets("El-kr").Cells(line + 3, stup + 2) = 6 * E * II / (L * L) Sheets("El-kr").Cells(line + 6, stup + 2) = 6 * E * II / (L * L) Sheets("El-kr").Cells(line + 3, stup + 5) = -6 * E * II / (L * L) Sheets("El-kr").Cells(line + 5, stup + 3) = -6 * E * II / (L * L) Sheets("El-kr").Cells(line + 5, stup + 6) = -6 * E * II / (L * L) Sheets("El-kr").Cells(line + 6, stup + 5) = -6 * E * II / (L * L) Sheets("El-kr").Cells(line + 3, stup + 3) = 4 * E * II / (L) Sheets("El-kr").Cells(line + 3, stup + 6) = 2 * E * II / (L) Sheets("El-kr").Cells(line + 6, stup + 3) = 2 * E * II / (L) Sheets("El-kr").Cells(line + 6, stup + 6) = 4 * E * II / (L) Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6) ' ' ------------------------------------------------------- ' matrica transformacije ' ------------------------------------------------------- stup = stup + 7 For j = 1 To 6 For k = 1 To 6 Sheets("El-kr").Cells(line + j, stup + k) = 0 Next k Next j Sheets("El-kr").Cells(line + 1, stup + 1) = Cos(alfa) Sheets("El-kr").Cells(line + 1, stup + 2) = Sin(alfa) Sheets("El-kr").Cells(line + 2, stup + 1) = -Sin(alfa) Sheets("El-kr").Cells(line + 2, stup + 2) = Cos(alfa) Sheets("El-kr").Cells(line + 3, stup + 3) = 1 Sheets("El-kr").Cells(line + 4, stup + 4) = Cos(alfa) Sheets("El-kr").Cells(line + 4, stup + 5) = Sin(alfa) Sheets("El-kr").Cells(line + 5, stup + 4) = -Sin(alfa) Sheets("El-kr").Cells(line + 5, stup + 5) = Cos(alfa) Sheets("El-kr").Cells(line + 6, stup + 6) = 1 Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6) ' ' ------------------------------------------------------- ' Prebacivanje matrice u globalni koordinatni sustav ' ------------------------------------------------------- stup = stup + 7 Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).Select Selection.FormulaArray = "=MMULT(TRANSPOSE(RC[-7]:R[5]C[-2]),MMULT(RC[-14]:R[5]C[-9],RC[-7]:R[5]C[-2]))" Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 6)).BorderAround (6) Next istap ' ' ' ------------------------------------------------------- ' Ponistavanje globalne matrice krutosti ' ------------------------------------------------------- Worksheets("Gl-kr").Activate Worksheets("Gl-kr").Range("A1:IV36000").Clear ' line = 1 ' stup = 1 ' For j = 1 To (br_cvorova * 3) ' For k = 1 To (br_cvorova * 3) ' Sheets("Gl-kr").Cells(line + j, stup + k) = 0 ' Next k ' Next j Sheets("Gl-kr").Range(Cells(2, 2), Cells(1 + br_cvorova * 3, 1 + br_cvorova * 3)).Value = 0 ' ' ------------------------------------------------------- ' Slaganje elementnih matrica u globalnu matricu krutosti ' ------------------------------------------------------- For istap = 1 To br_stapova ' ' Prva podmatrica (gore lijevo) line = (istap - 1) * 7 + 2 stup = 15 c1 = stap_cvor(istap, 1) c2 = stap_cvor(istap, 2) line_g = (c1 - 1) * 3 + 1 stup_g = (c1 - 1) * 3 + 1 For j = 1 To 3 For k = 1 To 3 Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k) Next k Next j ' ' Druga podmatrica (gore desno) line = (istap - 1) * 7 + 2 stup = 18 c1 = stap_cvor(istap, 1) c2 = stap_cvor(istap, 2) line_g = (c1 - 1) * 3 + 1 stup_g = (c2 - 1) * 3 + 1 For j = 1 To 3 For k = 1 To 3 Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k) Next k Next j ' ' Druga podmatrica (dole lijevo) line = (istap - 1) * 7 + 5 stup = 15 c1 = stap_cvor(istap, 1) c2 = stap_cvor(istap, 2) line_g = (c2 - 1) * 3 + 1 stup_g = (c1 - 1) * 3 + 1 For j = 1 To 3 For k = 1 To 3 Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k) Next k Next j ' ' Druga podmatrica (dole desno) line = (istap - 1) * 7 + 5 stup = 18 c1 = stap_cvor(istap, 1) c2 = stap_cvor(istap, 2) line_g = (c2 - 1) * 3 + 1 stup_g = (c2 - 1) * 3 + 1 For j = 1 To 3 For k = 1 To 3 Sheets("Gl-kr").Cells(line_g + j, stup_g + k) = Sheets("Gl-kr").Cells(line_g + j, stup_g + k) + Sheets("El-kr").Cells(line + j, stup + k) Next k Next j Next istap Sheets("Gl-kr").Range(Cells(2, 2), Cells(1 + br_cvorova * 3, 1 + br_cvorova * 3)).BorderAround (6) ' ' ------------------------------------------------------- ' Prepisivanje globalne matrice krutosti (prije uvrstenja RU) ' ------------------------------------------------------- line = 1 stup = 1 line_g = (br_cvorova * 3) + 2 For j = 1 To (br_cvorova * 3) For k = 1 To (br_cvorova * 3) Sheets("Gl-kr").Cells(line_g + j, stup + k) = Sheets("Gl-kr").Cells(line + j, stup + k) Next k Next j Sheets("Gl-kr").Range(Cells(line_g + 1, 2), Cells(line_g + br_cvorova * 3, 1 + br_cvorova * 3)).BorderAround (6) ' ' ------------------------------------------------------- ' Uvrstavanje Rubnih Uvjeta ' ------------------------------------------------------- For icvor = 1 To br_cvorova For iprd = 1 To 3 If (cvor_pridr(icvor, iprd)) = 1 Then For j = 1 To (br_cvorova * 3) Sheets("Gl-kr").Cells(line_g + (icvor - 1) * 3 + iprd, j + 1) = 0 Sheets("Gl-kr").Cells(line_g + j, (icvor - 1) * 3 + iprd + 1) = 0 Next j Sheets("Gl-kr").Cells(line_g + (icvor - 1) * 3 + iprd, (icvor - 1) * 3 + iprd + 1) = 1 End If Next iprd Next icvor ' ' ------------------------------------------------------- ' Izracunavanje K-1 ' ------------------------------------------------------- ' line_g = (br_cvorova * 3) * 2 + 3 Range(Cells(line_g + 1, 2), Cells(line_g + br_cvorova * 3, 1 + br_cvorova * 3)).Select str = "=MINVERSE(R[" + CStr(-br_cvorova * 3 - 1) + "]C:R[" + CStr(-2) + "]C[" + CStr(br_cvorova * 3 - 1) + "])" Selection.FormulaArray = str Selection.BorderAround (6) ' ' ------------------------------------------------------- ' Postavi sve sile u cvorovima na 0.00 ' ------------------------------------------------------- line_g = (br_cvorova * 3) * 2 + 3 stup_g = (br_cvorova * 3) + 3 For icvor = 1 To br_cvorova For j = 1 To 3 ipos = (icvor - 1) * 3 + j Sheets("Gl-kr").Cells(line_g + ipos, stup_g) = 0 If (j = 1) Then str = "Fx-" + CStr(icvor) If (j = 2) Then str = "Fy-" + CStr(icvor) If (j = 3) Then str = "M-" + CStr(icvor) Sheets("Gl-kr").Cells(line_g + ipos, stup_g - 1) = str Next j Next icvor Range(Cells(line_g + 1, stup_g), Cells(line_g + br_cvorova * 3, stup_g)).Select Selection.BorderAround (6) ' ' ------------------------------------------------------- ' Izracunaj pomake ' ------------------------------------------------------- line_g = (br_cvorova * 3) * 2 + 3 Range(Cells(line_g + 1, stup_g + 2), Cells(line_g + br_cvorova * 3, stup_g + 2)).Select str = "=MMULT(RC[" + CStr(-br_cvorova * 3 - 3) + "]:R[" + CStr(br_cvorova * 3 - 1) + "]C[" + CStr(-4) + "],RC[" + CStr(-2) + "]:R[" + CStr(br_cvorova * 3 - 1) + "]C[" + CStr(-2) + "])" Selection.FormulaArray = str Selection.BorderAround (6) End Sub Sub stapni_sustavi_sile() Dim stap_cvor(300, 2) As Integer ' ------------------------------------------------------- ' Ucitaj ponovno osnovne podatke modela ' ------------------------------------------------------- br_stapova = Sheets("Ulazni podaci").Cells(2, 2) br_cvorova = Sheets("Ulazni podaci").Cells(1, 2) ' ------------------------------------------------------- ' Ucitaj ponovno podatke o stapovima modela ' ------------------------------------------------------- line = 6 + br_cvorova + 3 For i = 1 To br_stapova istap = Sheets("Ulazni podaci").Cells(line, 1) stap_cvor(istap, 1) = Sheets("Ulazni podaci").Cells(line, 2) stap_cvor(istap, 2) = Sheets("Ulazni podaci").Cells(line, 3) line = line + 1 Next i ' ' ------------------------------------------------------- ' Postavi pomake kod lokalnih matrica (pazi na cvorove) ' ------------------------------------------------------- Worksheets("El-kr").Activate stup_g = (br_cvorova * 3) + 3 For istap = 1 To br_stapova line = (istap - 1) * 7 + 2 stup = 22 i1 = stap_cvor(istap, 1) i2 = stap_cvor(istap, 2) line_g = (br_cvorova * 3) * 2 + 3 Cells(line + 1, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 1, stup_g + 2).Value Cells(line + 2, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 2, stup_g + 2).Value Cells(line + 3, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i1 - 1) * 3 + 3, stup_g + 2).Value Cells(line + 4, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 1, stup_g + 2).Value Cells(line + 5, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 2, stup_g + 2).Value Cells(line + 6, stup + 1) = Sheets("Gl-kr").Cells(line_g + (i2 - 1) * 3 + 3, stup_g + 2).Value Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6) Next istap ' ' ------------------------------------------------------- ' Rotiraj pomake u lokalni koordinatni sustav ' ------------------------------------------------------- For istap = 1 To br_stapova line = (istap - 1) * 7 + 2 stup = 24 Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).Select Selection.FormulaArray = "=MMULT(RC[-16]:R[5]C[-11],RC[-2]:R[5]C[-2])" Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6) Next istap ' ' ------------------------------------------------------- ' Pomnozi K-loc * u ' ------------------------------------------------------- For istap = 1 To br_stapova line = (istap - 1) * 7 + 2 stup = 26 Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).Select Selection.FormulaArray = "=MMULT(RC[-25]:R[5]C[-20],RC[-2]:R[5]C[-2])" Range(Cells(line + 1, stup + 1), Cells(line + 6, stup + 1)).BorderAround (6) Next istap End Sub